今天就來第17題ㄌ
給定一個只有數字 2 到 9 的字串 digits,如同電話按鈕一樣,每個數字對應到幾個特定英文字母,要求返回所有的組合
問題描述:給定一個數字字符串,每個數字代表電話鍵盤上的字母,返回可能的字母組合。
遞迴方案:
初始化字母對應關係:
處理空字符串的特殊情況:
主函數調用遞迴:
letterCombinations
將初始化結果列表,然後調用遞迴函數生成所有組合。結果返回:
class Solution {
public:
// 按鍵對應的字母
vector<string> buttons = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
// 遞迴函數:生成所有可能的字母組合
void addLetter(const string& digits, int index, string& current, vector<string>& ans) {
// 如果到達字符串末尾,將當前組合加入答案
if (index == digits.size()) {
ans.push_back(current);
return;
}
// 取得當前數字對應的字母
int num = digits[index] - '2'; // 將數字轉換為對應的按鍵索引
for (char ch : buttons[num]) {
current.push_back(ch); // 添加當前字母
addLetter(digits, index + 1, current, ans); // 處理下一個數字
current.pop_back(); // 回溯,移除當前字母
}
}
vector<string> letterCombinations(string digits) {
if (digits.empty()) return {}; // 處理空輸入情況
vector<string> ans;
string current; // 用於存儲當前的字母組合
addLetter(digits, 0, current, ans); // 調用遞迴函數
return ans;
}
};